package com.caregiver.watch.business.care.dao;

import com.caregiver.watch.business.care.model.bo.FenceRecipientRelationBo;
import com.caregiver.watch.business.care.model.po.FenceRecipientRelation;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 围栏生效的照护人信息数据访问接口
 */
public interface FenceRecipientRelationDao {
    
    /**
     * 插入新的围栏照护人关系记录
     * @param relation 围栏照护人关系信息
     * @return 影响行数
     */
    int insert(FenceRecipientRelation relation);
    
    /**
     * 批量插入围栏照护人关系记录
     * @param relations 围栏照护人关系信息列表
     * @return 影响行数
     */
    int batchInsert(@Param("relations") List<FenceRecipientRelation> relations);
    
    /**
     * 根据ID更新围栏照护人关系记录
     * @param relation 围栏照护人关系信息
     * @return 影响行数
     */
    int updateById(FenceRecipientRelation relation);
    
    /**
     * 根据ID删除围栏照护人关系记录
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 根据围栏ID删除关联的照护人关系记录
     * @param fenceId 围栏ID
     * @return 影响行数
     */
    int deleteByFenceId(Long fenceId);
    
    /**
     * 根据ID查询围栏照护人关系记录
     * @param id 主键ID
     * @return 围栏照护人关系记录
     */
    FenceRecipientRelation selectById(Long id);
    
    /**
     * 根据围栏ID查询所有关联的照护人信息
     * @param fenceId 围栏ID
     * @return 围栏照护人关系记录列表
     */
    List<FenceRecipientRelation> selectByFenceId(@Param("fenceId") Long fenceId);

    /**
     * 根据围栏ID和被照护人ID查询关联的围栏照护人关系记录
     * @param fenceIds 围栏ID
     * @return 围栏照护人关系记录
     */
    List<FenceRecipientRelationBo> selectByFenceIds(@Param("fenceIds") List<Long> fenceIds);
    
    /**
     * 根据被照护人ID查询关联的围栏信息
     * @param recipientId 被照护人ID
     * @return 围栏照护人关系记录列表
     */
    List<FenceRecipientRelation> selectByRecipientId(@Param("recipientId") Long recipientId);
    
    /**
     * 查询所有围栏照护人关系记录
     * @return 围栏照护人关系记录列表
     */
    List<FenceRecipientRelation> selectAll();

    /**
     * 批量删除围栏照护人关系记录
     * @param deleteRelationIds 删除的围栏照护人关系记录ID列表
     */
    void deleteByIds(@Param("deleteRelationIds") List<Long> deleteRelationIds);
}
